UnityのEditor上で動くpubsub用Server context を作った
概要
あるとゲーム試すの楽になりそうなので組んでみる。
こないだ作ったnginx-lua-moduleでのpubsubのしくみ
nginx-luajit-websocket-pubsuber
https://github.com/sassembla/nginx-luajit-websocket-pubsuber
で、
Client -> (バックエンド) -> redis -> Server contextになるわけだが、
もしも、このServer contextをUnityのEditorで実現できると、
ClientもServer contextも、一つのUnity上で動かせる感じになる。これはラクじゃね?
つまりゲームコードとサーバコードを一カ所、Unity上で編集できる。
あくまで実験だが。
Editor側に来てほしいもの
ClientはUnityのPlayer側に任せるとして、
nginx-luajit-websocket-pubsubberがredisをqueueに使っているので、
Editor側で請負いたいのは、redisのpubsubを捌く機構。
upstreamはこんなの。
Client -> (中略) -> redis-pub -> redis -> redis-sub -> Server context
downstreamはこんなの。
Client <- (中略) <- redis-sub <- redis <- redis-pub <- Server context
なので、Unity EditorのコードでゲームのServer側コンテキスト書いて、
あとはpubとsubが出来れば、バックエンド機構の立ち上げは別途必要として、下記のような構造が作れそう。
、、うん、わかんねえな?
要は、一台でもUnity EditorでServer contextが動いていれば、nginxをWebServerとしてClient1~3とやり取りできるようになる。
Client1とUnity Editor Server context は一つのUnity Application上で動かせる。
nginx-luaでWebSocketServeしたりしてると、各ClientがLAN内で一台のUnity EditorのServer context と接続されて、ゲーム試したりとか出来る。
しかもServer context はUnity上で動いているコードなので、適当に編集可能。
Clientとやり取りするデータの型とかの共有も可能。
まあ編集するたびに更新されるんだが。リセット命令は必要だと思うけど今回はめんd
出来上がった物がこちら
UEaaS
https://github.com/sassembla/UEaaS
ひどい名前なので気に入った。
そのうち正気に戻って付け直すと思う。
機能とか特性とかは下記。
・redisでpubsubしたデータをUnityEditor内でsubscribeしたりpublishしたりする
・EditorコードなのでUnity起動したらそのまま動いてる
・redisの先にClientが居れば、データが届く
・payload部分はjson、それ以外のroutingとかpublish先の限定はbyteで書き込まれ、Clientに到達するのはデータのみ
・Clientのログを集計できるような命令乗っけといた
Unity上で編集の必要がある全部のコードが弄れるようになった。とりあえず足がかりとしては満足だ。
ざっくりClient-Server間はstringでやり取りするように書いたけど、だいたいbyteで操作してるのでmsgpackへの変更も可能。
そしてこれで、Server contextをluaで書かなくてよくなる。